package revisao2;

import revisao1.Produto;

public class RepositorioProdutosArray implements RepositorioProdutos {
	//define a capacidade maxima do array;
	private int MAX_PRODUTOS = 100;
	// um array para armazenar os produtos;
	private Produto [] produtos;
	//uma variavel  para guardar o total de produtos;
	private int totalProdutos;
	
	/**
	 * Construtor da classe RepositorioProdutosArray.
	 */
	public RepositorioProdutosArray(){
		totalProdutos = 0;
		produtos = new Produto[MAX_PRODUTOS];
	}
	
	/**
	 * Recebe o codigo do produto e devolve o indice desse produto no array ou
     * -1 caso ele nao se encontre no array.
     * 
	 * @param codigo - o codigo do produto.
	 * @return - o indice no array.
	 */
	private int procurarIndice(int codigo){
		for (int i=0; i<totalProdutos;i++){
			if ( produtos[i].getCodigo() == codigo ){
				return i;
			}
		}
		
		return -1;
	}
	
	/* (non-Javadoc)
	 * @see leda.revisao2.RepositorioProdutos#existe(int)
	 */
	public boolean existe(int codigo){
		
		for (int i=0; i<totalProdutos;i++){
			if ( produtos[i].getCodigo() == codigo ){
				return true;
			}
		}
		
		return false;
	}
	
	/* (non-Javadoc)
	 * @see leda.revisao2.RepositorioProdutos#inserir(leda.revisao1.Produto)
	 */
	public void inserir(Produto produto){
		//verifica a capacidade do array...
		if (totalProdutos < MAX_PRODUTOS)
			produtos[totalProdutos++] = produto;
			//inserir e aumentar a quantidade de produtos...
	}
	
	/* (non-Javadoc)
	 * @see leda.revisao2.RepositorioProdutos#atualizar(leda.revisao1.Produto)
	 */
	public void atualizar (Produto produto) throws Exception { //* exception
		
		for (int i=0; i<totalProdutos;i++){
			if ( produtos[i].getCodigo() == produto.getCodigo() ){
				produtos[i] = produto;
				return;
			}
		}
		//lancar excecao...
		throw new Exception("Produto nao esta Adicionado no Array!");
		
	}
	
	/* (non-Javadoc)
	 * @see leda.revisao2.RepositorioProdutos#remover(int)
	 */
	public void remover (int codigo) throws Exception {//* exception
		if (existe(codigo)){
			int indice = procurarIndice(codigo);
			
			for (int i = indice; i < totalProdutos-1 ; i++){
				produtos[i] = produtos[i+1];
			}
			
			//decremente a quantidade de produtos;
			totalProdutos--; 
		}
		else
			throw new Exception("Esse Produto nao existe!");
	}
	
	
	/* (non-Javadoc)
	 * @see leda.revisao2.RepositorioProdutos#procurar(int)
	 */
	public Produto procurar(int codigo) throws Exception {//* exception
		
		if (existe(codigo)){
			int indice = procurarIndice(codigo);
			return produtos[indice];
		}
		else
			throw new Exception("Esse Produto nao Existe!");
	}
	
	/**
	 * Mostrar todo o repositorio...
	 */
	public String toString(){
		StringBuilder builder = new StringBuilder();
		
		for (int i=0; i< totalProdutos; i++){
			builder.append(produtos[i].toString());
			builder.append("\n");
		}
		return builder.toString();
	}

}
